package com.itheima.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.common.PageParam;
import com.itheima.common.R;
import com.itheima.dto.DishDto;
import com.itheima.service.DishService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RequestMapping("/dish")
@RestController
public class DishController {

    @Autowired
    private DishService dishService;



    /**
     * 新增菜品
     * @param dishDto
     * @return
     */
    @PostMapping
    public R add(@RequestBody DishDto dishDto){

        //调用service
        int row = dishService.add(dishDto);

        //判定结果
        if(row > 0){
            return R.success("添加菜品成功！");
        }
        return R.error("添加菜品失败！");

    }

    /**
     * 菜品分页
     *  1. 菜品分页，只是去查询菜品表而已，得到的固然是菜品的数据，但是页面还需要用到分类的数据。
     *  2. 这里遇到两个问题：
     *      2.1 怎么才能查询到菜品的分类名称？
     *          2.1.1 当我们查询出来10条【假设每页10条数据】菜品数据之后，菜品数据身上是有分类的id值。
     *          2.1.2 那么就可以拿着分类的id值去查询分类表，得到该分类的所有信息，当然也就包括分类的名称
     *      2.2 如何把菜品的数据和分类的名称一块返回给前端呢？
     *          2.2.1 需要把菜品的数据和分类的名称数据看成是一个整体，使用一个全新的JavaBean来包装它们。
     *          2.2.2 可以使用DishDto来包装：
     *              1. 它继承了Dish类型，所以它能够包装Dish的数据
     *              2. 它也声明了一个新的属性： categoryName 这个可以包装分类的名称。
     *
     *  3. 一会代码要下沉到Service层去写！并且service层的返回值必须是： IPage<DishDto>
     *
     * @param pageParam
     * @return
     */
    @GetMapping("/page")
    public R page(PageParam pageParam){

        //1. 调用service
        IPage<DishDto> page = dishService.page(pageParam);

        //2. 返回结果
        return R.success(page);
    }


    /**
     * 根据分类id来查询菜品数据
     * @param categoryId
     * @return
     */
    @GetMapping("/list")
    public R findByCategoryId(Long categoryId , Integer status){

        List<DishDto> dtoList = dishService.findByCategoryId(categoryId, status);

        return R.success(dtoList);
    }


    /**
     * 更新菜品
     * @param dishDto
     * @return
     */
    @PutMapping
    public R update(@RequestBody DishDto dishDto){

        int row = dishService.update(dishDto);
        if(row > 0){
            return R.success("更新成功!");
        }
        return R.error("更新失败！");

    }
}
